Extended Fileystem(EXT)가상 디렉토리를 이용해 물리적 장치를 다루며,
물리적 자이체 고정 길이의 블록을 이용해서 데이터를 저장하는 유닉스와 유사한 파일 시스템
ext 파일 시스템에서 가상 디렉토리에 저장되어 있는 파일의 대한 정보를 추적하기 위해 inode 시스템을 이용한다.
inode system 에서는 물리적 장치마다 파일 정보를 저장하기 위해 아이노드 테이블을 만든다.
inode를 가지는 모든 파일은 아이노드 테이블에 항목을 가진다.
확장된 파일 시스템은 파일을 추적하기 위한 추가 데이터를 가진다.
- 파일 이름
- 파일 크기
- 파일의 소유자
- 파일이 속한 그룹
- 파일 접근 권한
- 파일에서 데이터가 들어있는 각 디스크 블록에 대한 포인터
리눅스는 데이터 파일이 만들어 질 때, 파일 시스템이 할당하는 고유한 번호(inode)를 이용해
아이노드 테이블의 각 아이노드를 참조한다.
(전체 파일 이름과 파일 경로를 사용하는 것이 아닌 아이노드 번호를 사용해서 식별)
EXT2기존의 ext 파일 시스템은 파일 크기가 2GB 이하로 제한된다는 한계를 가지고 있었다.
ext2 파일시스템은 시스템의 각 파일에 대한 추가 정보를 추적할 수 있도록 아이노드 테이블 형식을 확장했다.
- 파일 생성 시간
- 파일 마지막 수정 시간
- 파일 마지막 사용 시간
데이터베이스 서버에서 볼 수 있는 큰 파일을 수용할 수 있도록 최대 파일의 크기를 2TB가지 증가시켰다.
(ext2 이후의 파일 시스템은 32TB까지 허용)
ext 파일시스템은 파일이 물리적 장치에 기록될 때, 데이터를 저장하는데 쓰이는 블록이 장치 여러저기에 산재해 있었기 때문에
블록이 파편화 되면서 블록에 접근하는 시간이 길어지면서 파일 시스템 성능이 떨어지는 문제점을 가지고 있었다.
ext2 파일시스템에서는 파일을 저장할 때, 디스크 블록을 그룹으로 할당하여 파편화를 줄일 수 있다.
ext2는 파일이 저장될 때와 아아노드 테이블이 업데이트 되는 사이에 컴퓨터 시스템에 문제가 발생했을 때,
파일과 아이노드 테이블의 연결고리가 끊어질 수도 있다는 문제점을 발생시킬 수 있다.
(ext2 파일 시스템은 시스템이 충돌하거나 전원이 나갔을 때 쉽게 망가지는것으로 악명이 높았음)
Journaling File System저장장치에 데이터를 직접작성하고 아이노드 테이블을 업데이트 하는 대신, 저널링 파일 시스템이
먼저 임시 파일(저널)에 파일의 변경된 내용을 기록한다. 이 후, 데이터가 성공적으로 저장장치 및 아이노드 테이블에 기록되고 난 후
저널 항목은 지워진다.
- 데이터 모드: 아이노드 및 파일 데이터 모두 저널링(데이터 손실의 위험이 낮지만 낮은 성능)
- 순차 모드: 아이노드 데이터는 저널에 기록, 파일 데이터가 성공적으로 기록될 때까지 제거되지 않는다.(성능과 안전 사이의 타협점)
- 쓰기 저장 모드: 아이노드 데이터만 저널에 기록되며 언제 파일 데이터가 기록되는 제어하지 않음.(데이터 손실 위험이 다소 높음)
Journaling File System)
주 파일 시스템에 변경사항을 반영(commit)하기 전에,
저널(주로 파일 시스템의 지정된 영역 안의 원형 로그)안에 생성되는 변경사항을 추적하는 파일 시스템
시스템 충돌이나 전원 문제가 발생하면, 저널링 파일 시스템이 더 빠르게 online 상태로 돌아오며 손상 가능성이 낮다.
일반적인 유닉스 파일 시스템에서의 파일 제거 과정
1. 해당 파일의 디렉토리 엔트리를 삭제
2. 파일이 사용하던 아이노드를 free inode pool로 반환
3. 파일이 사용하던 디스크 블록을 free disk pool로 반환
위의 과정에서 중간에 시스템 오류가 발생할 시, orphaned inode가 되어 스토리지 누수가 발생하거나
디스크 블록이 반환 받지 못해 해당 디스크 용량을 사용하지 못하는 상태가 되어 버린다.
위의 과정은 순서가 바뀌어도 해결이 불가능한 완전한 워크(walk)가 필요한 작업이다.
저널 파일 시스템은 변경사항을 기록하는 특별한 구역(journal)을 할당하기에, 시스템 충돌이후
파일시스템에서 저널을 읽고 파일 시스템의 오류가 복구될 때까지 저널의 변경사항을 Replay하는 것으로 복구가 가능하다
(저널 파일 시스템에서 변경사항은 원자적 atomic!)
ext3
각 저장장치마다 저널(journal)파일을 추가하였다.
저널 파일시스템의 "순자 모드"를 default 설정 값으로 힌다
(데이터 블록이 성공적으로 commit 될때까지 저널을 삭제하지 않음)
하지만, 실수한 파일에 대한 어떠한 복구 기능도 지원하지 않으며 내장된 데이터 압축 기능(패키지를 따로 설치해야 함)이 제공되지 않으며
파일 암호화를 지원하지 않았다.
ext4
ext4는 2008년 공식적으로 리눅스 커널에서 지원되었으며 우분투와 같은 리눅스 배포판에서 사용되고 있다.
ext4는 압축 및 암호화를 지원할 뿐만 아니라 익스텐트(extent) 기능을 제공한다.
extent(익스텐트): 저장장치에 공간을 블록 단위로 할당하고 아이노드 테이블에는 시작 블록의 위치만 저장한다.
(아이노드 테이블 공간 절약)
ext4 파일시스템에서는 블록 사전 할당 기능을 통합시켰다. 크기가 증가할 것으로 기대되는 파일을 위한 공간을 저장장치에 할당하는 경우,
예상되는 블록을 추가로 할당한다.(0으로 set한 후, 다른 파일에서 할당할 수 없도록 기억한다.)
ext4의 최대 파일 크기는 16TiB이며 최대 약 40억개의 파일을 가질 수 있다.
Reiser File System(라이저 파일 시스템)리눅스를 위한 첫 번째 저널링 파일 시스템
저널링 파일 시스템의 "쓰기 저장 모드"만 지원한다.
1. 활성화 상태의 파일시스템의 크기를 바꿀 수 있다.
2. 테일 패킹(tailpacking): 어떤 파일의 데이터를 다른 파일의 데이터 블록 사이 빈 공간에 삽입 가능
JFS(Journaled File System)가장 오래된 저널 파일 시스템으로 IBM의 유닉스 계열 AIX OS를 위해 개발되었으며, 두번째 버전까지는 리눅스에 이식 불가
JFS는 대부분 "순차 저널링 방식"을 사용하며, 익스텐트 기반의 할당 기법을 사용하기에 저장장치 파편화가 상대적으로 적다.
XFSSilicon Graphic Incorporated, SGI에서 상용 IRIX 유닉스 시스템을 위한 저널링 파일 시스템으로
"쓰기 저장 모드"를 사용하므로 높은 성능을 제공하지만 상대적으로 안정성이 떨어진다.
XFS 또한 ReiserFS처럼 크기 조절 기능을 제공하지만, 확장만 가능하며 축소는 불가능하다.
Copy-On-Write, COW저널링 파일 시스템이 성능과 안정성 사이에서 타협을 하여야 한다는 점에서 대안으로 등장하였다.
COW는 스냅샷을 통해 높은 성능과 안정성을 제공한다.
데이터를 수정할 때에는 복제복 또는 기록 가능한 스냅샷이 사용되며, 현재의 데이터에 수정 데이터를 덮어쓰는 대신 수정된 데이터는
새로운 파일시스템 위치에 배치된다.(수정 완료되어도 기존 데이터를 절대 덮어 쓰지 않는다.)
Copy On Wirte는 프로그래밍에서도 구현되어 사용되었던 기술로
리고스가 복제되었지만 수정이 되지 않는 경우 새 리소스를 만들 필요 없이 복사본과 원본이 리소스를 공유하고,
복사본이 수정되었을 때만 새 리소스를 만드는 리소스 관리 기법을 말한다.
ZFS썬마이크로시스템즈가 오픈 솔라리스 OS를 위해 개발했으며 2008년부터 리눅스로 포팅되었다.
ZFS는 GPL 라이선스가 없기 때문에 기본 리눅스 파일시스템으로 채택하지 않고 있다.
최초의 128비트 파일 시스템: 약 25경 6천조 제타바이트를 용량을 지원한다.
네트워크 지원: iSCSI, CIFS(Samba), NFS를 지원
SSD 캐시 지원
자체 RAID 지원; Redundant Array of Inexpensive/Independent Disk, RAID
Pool 기능 지원
Silent Corruption 방지
이와 같은 높은 성능으로 지상 최상의 파일 시스템이라고 불린다.
Btrfs(B-TRee File System)B트리 파일시스템이라고 불리는 Btrfs는 오라클에서 2007년에 개발을 시작하였다.
높은 안정성과 쉬운 사용성, 마운트된 파일 시스템의 크기를 극적으로 조절할 수 있다는 점에서 높은 인기를 끌고 있다.
openSUSE 리눅스 배포판은 기본 파일시스템으로 Btrfs을 채택하였다.
참고)
APFS(APple File System)썬 마이크로시스템즈의 ZFS를 도입하여 HFS+를 대체하려고 했던 계획이 무산된 애플은 자체적으로 APFS를 HFS+를 대체하는
시스템으로서 개발하였다.
Copy-on-Write, 스냅샷, LVM 등등 ZFS와 Btrfs에 있는 기능을 일부 지원한다.